'use strict'
//1.找出元素 item 在给定数组 arr 中的位置
// 输出描述:
// 如果数组中存在 item，则返回元素在数组中的位置，否则返回 -1

var arr = [1, 2, 3, 4];

function indexOfn(arr, item) {
  if (arr.indexOf(item) > 0) {
    return arr.indexOf(item)
  } else {
    return -1;
  }
}

console.log(indexOfn([1, 2, 3, 5], 3));



//2.计算给定数组 arr 中所有元素的总和
// 输入描述:
// 数组中的元素均为 Number 类型
// let arr=[1,2,3,4];
// function sum (arr){
//     var sum=0;
//     if(i=0;aa.length>0;i++){

//     }
// }

//3.移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr，结果返回新的数组


 let ab = [1,2,3,4];

 function sto(ab,item){
  var a = [];
   for(var i=0;i<ab.length;i++){
   if(ab[i] !==item){
       a.push(ac[i])
     }
   }
   return a;
 }

 console.log(sto([1,2,3,4],2));

 //4.移除数组 arr 中的所有值与 item 相等的元素，直接在给定的 arr 数组上进行操作，并将结果返回
 function ac(acd,item){
     for(var i=acd.length;i>=0;i--){
      if(acd[i]==item){
         acd.splice(i,1);
       }
     }
    return acd;
 }

 console.log(ac([1,2,2,3,4,2,2],2));


//5.在数组 arr 末尾添加元素 item。不要直接修改数组 arr，结果返回新的数组

let ad = [1,2,3,4];


function stu(ad,item){
  return ad.concat(item);
}
console.log(stu([1,2,3,4],99));



// 6.题目描述 删除数组 arr 最后一个元素。不要直接修改数组 arr，结果返回新的数组

var ae = [1,2,3,4];

function sto(ae){
  var aa = ae.concat();
  aa.pop();
  return aa;
}

console.log(sto([1,2,3,4]));

//7.在数组 arr 开头添加元素 item。不要直接修改数组 arr，结果返回新的数组
var af=[1,2,3,4,];

function weo(af,item){
    var so = af.join().split(',');
      so.unshift(item);
      return so;
  }
  console.log(weo([1,2,3,4],100));


//8.删除数组 arr 第一个元素。不要直接修改数组 arr，结果返回新的数组

var ag = [1,2,3,4];

function ao1 (ag){
  var a11 = ag.slice(0);
  a11.shift();
  return a11;
}
console.log(ao1([1,2,3,4]));



//9.合并数组 arr1 和数组 arr2。不要直接修改数组 arr，结果返回新的数组
var ah2 = [1,2,3,4];
var arr2=['a','b','c','d'];
function ah22(ah2,arr2){
  var ah21 = ah2.slice(0);
  var ah22 = arr2.slice(0);

  return ah21.concat(ah22);
}
console.log(ah22([1,2,3,4],['a','b','c','d']));

// 10.在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr，结果返回新的数组

var arr10 = [1,2,3,4];

function insert(arr10,item,index){
  var arr1 = arr10.slice(0);
  arr1.splice(index,0,item);
  return arr1;
}
console.log(insert([1,2,3,4],'z',2));



//11.统计数组 arr 中值等于 item 的元素出现的次数

var arr11 = [1,2,3,4];

function counts(arr11,item){
  var v11= 0;
  arr11.forEach(function(arrItem){
    if(item == arrItem){
      v11 ++;
    }
  })
  return v11;
}

console.log(counts([1,2,4,4,3,3,1,3],3));





//12.找出数组 arr 中重复出现过的元素
var arr12 = [1,2,3,4];

function doua(arr12){
  var arr122= [];
  arr12.forEach(function(item){
    if((arr.indexOf(item) != -1) && (arr12.indexOf(item) != arr12.lastIndexOf(item)) ){
      if(arr122.indexOf(item) == -1){
        arr122.push(item);
      }
    } 
  })
  return arr122;
}

console.log(doua([1,2,4,4,3,3,2,2,2]),2,4,3);




//13.为数组 arr 中的每个元素求二次方。不要直接修改数组 arr，结果返回新的数组
var arr13 = [1,2,3,4];

function suno(arr13){
   var arr133 = arr13.slice(0);
   arr133.forEach(function(item,idenx){
     arr133[idenx] = item * item;
   })
     return arr133;
}
  console.log(suno([1,2,3,4]));

 // 14.题目描述 在数组 arr 中，查找值与 item 相等的元素出现的所有位置

  var arr14 = [1,2,3,4];

 function aro(arr14,item){
   var arot = [];
   for(var i=0;i<arr14.length;i++){
     if(arr14[i] === item){
        arot.push(i);
     }
   }
   return arot;
 }

  console.log(aro([1,2,3,4],4));



  // 15、题目描述
  // 判断 val1 和 val2 是否完全等同
  
  // function identity(val1, val2) {
  
  // }
  // */
  
  
  /*
  16、题目描述
  定义一个计算圆面积的函数area_of_circle()，它有两个参数：
  
  r: 表示圆的半径；
  pi: 表示π的值，如果不传，则默认3.14
  
  function area_of_circle(r, pi) {
  
  }
  */
  
  
  /*
  17、题目描述
  
  <!-- HTML结构 -->
  <ul id="test-list">
      <li>JavaScript</li>
      <li>Swift</li>
      <li>HTML</li>
      <li>ANSI C</li>
      <li>CSS</li>
      <li>DirectX</li>
  </ul>
  
  针对以上文档结构，请把与Web开发技术不相关的节点删掉：
  
  注意！！请分别使用原生JS和jQuery两种试实现！！！！！
  
  */





  //18.  要求:
// 绑定合适的事件处理函数，实现以下逻辑：

// 当用户勾上“全选”时，自动选中所有语言，并把“全选”变成“全不选”；

// 当用户去掉“全不选”时，自动不选中所有语言；

// 当用户点击“反选”时，自动把所有语言状态反转（选中的变为未选，未选的变为选中）；

// 当用户把所有语言都手动勾上时，“全选”被自动勾上，并变为“全不选”；

// 当用户手动去掉选中至少一种语言时，“全不选”自动被去掉选中，并变为“全选”。
  var
  form = $('#test-form'),
  langs = form.find('[name=lang]'),
  selectAll = form.find('label.selectAll :checkbox'),
  selectAllLabel = form.find('label.selectAll span.selectAll'),
  deselectAllLabel = form.find('label.selectAll span.deselectAll'),
  invertSelect = form.find('a.invertSelect');

// 重置初始化状态:
form.find('*').show().off();
form.find(':checkbox').prop('checked', false).off();
deselectAllLabel.hide();
// 拦截form提交事件:

form.off().submit(function (e) {
  e.preventDefault();
  alert(form.serialize());
});
// TODO:绑定事件


selectAll.change(function () {
  if (this.checked) {
    langs.prop('checked', true);
    deselectAllLabel.show();
    selectAllLabel.hide();
  } else {
    langs.prop('checked', false);
    deselectAllLabel.hide();
    selectAllLabel.show();
  }
});


// 当用户点击“反选”时，自动把所有语言状态反转（选中的变为未选，未选的变为选中）；

invertSelect.click(function(){
  langs.each(function(){
    if(this.checked){
      $(this).prop('checked',false);
    }else{
      this.checked = true;
    }
  })
 })

// 当用户把所有语言都手动勾上时，“全选”被自动勾上，并变为“全不选”；

var count = 0,
len = langs.length;
langs.click(function(){
count = 0;
langs.each(function(){
if(this.checked)
 count++;
})
if(count == len){
selectAll.prop('checked',true);
deselectAllLabel.show();
selectAllLabel.hide();
}else{
 selectAllLabel.show();
 deselectAllLabel.hide();
 selectAll.prop('checked',false);
}
})


